﻿// 803 走路3.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <memory.h>
#include <vector>

using namespace std;
/*

http://oj.daimayuan.top/course/5/problem/256

蜗蜗的世界里有 n个城市，城市之间通过 m条单向高速公路连接，初始他在 1 号城市。
蜗蜗想去 n号城市游玩，假设现在他在 x号城市，他会等概率地选择从 x出发的高速公路中的一条走过去。
如果没有任何从 x号城市出发的高速公路，他就只能留在原地了。蜗蜗会一直走直到他走到 n号城市。

请问蜗蜗期望经过多少条高速公路能够走到 n号城市。

输入格式
第一行两个整数 n,m。

接下来 m行，每行两个整数 x,y(1≤x<y≤n)描述一条从 x号城市到 y号城市的高速公路。

数据保证没有任何两条高速公路的 x,y是相同的。

数据保证所有城市都可以到 n号城市。

输出格式
一行一个数表示蜗蜗期望经过多少条高速公路能够走到 n号城市。由于答案是分数，请输出答案 mod 1e9+7。

样例输入
3 3
1 2
1 3
2 3
样例输出
500000005
数据范围
对于100%的数据，2≤n≤100,1≤m≤1000。
*/

int n, m;
vector<int> c[101];
long long f[101];
const int p = 1000000007;

long long rp(long long now, int k) {
	long long res = 1;
	for (; k; k >>= 1, now *= now, now %= p)
		if (k & 1)
			res *= now, res %= p;
	return res;
}


int main()
{
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= m; i++) {
		int x, y;
		scanf("%d%d", &x, &y);
		c[x].push_back(y);
	}
	memset(f, 0, sizeof f);
	for (int i = n - 1; i; i--) {
		int l = c[i].size();
		f[i] = 1;
		for (int j = 0; j < l; j++) {
			f[i] += f[c[i][j]] * rp(l, p - 2), f[i] %= p;
		}
	}

	printf("%lld\n", f[1]);

	return 0;
}
 